package chemtools_logica.BDL.SFBean;

import chemtools_logica.BDL.IL.BDL_SFEmpresaLocal;
import chemtools_logica.BDL.IR.BDL_SFEmpresaRemote;

import chemtools_logica.Beans.EmpresaBean;

import chemtools_logica.Entidades.Empresa;

import chemtools_logica.Entidades.Ubigeo;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import javax.ejb.SessionContext;
import javax.ejb.Stateless;

import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless(name = "BDL_SFEmpresa", mappedName = "map-BDL_SFEmpresa")
public class BDL_SFEmpresaBean implements BDL_SFEmpresaRemote, BDL_SFEmpresaLocal {
    @Resource
    SessionContext sessionContext;
    @PersistenceContext(unitName = "Chemtools_Logica")
    private EntityManager em;

    public BDL_SFEmpresaBean() {
    }

    public Empresa persistEmpresa(Empresa empresa) {
        em.persist(empresa);
        return empresa;
    }

    public Empresa mergeEmpresa(Empresa empresa) {
        return em.merge(empresa);
    }
    
    public void insertEmpresa(Empresa empresa){
        try{
            em.merge(empresa);
        }catch(Exception e){}
    }

    public void removeEmpresa(Empresa empresa) {
        empresa = em.find(Empresa.class, empresa.getIdEmpresa());
        em.remove(empresa);
    }

    /** <code>select o from Empresa o</code> */
    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    public List<Empresa> getEmpresaFindAll() {
        return em.createNamedQuery("Empresa.findAll", Empresa.class).getResultList();
    }
    
    public List<Empresa> getAllEmpresasbyFiltro(EmpresaBean bean){
        List<Empresa> listaEntidad=new ArrayList<Empresa>();
        
        String ejb = "SELECT u FROM Empresa u WHERE 1=1"; 
        if(bean.getRazonSocial() != "" && bean.getRazonSocial()!= null ){
            ejb+=" AND lower(u.razonSocial) LIKE '%" + bean.getRazonSocial().toLowerCase()+"%' ";
        }  
        if(bean.getRuc() != null && bean.getRuc().trim() != "" ){
            ejb+=" AND u.ruc like '%" + bean.getRuc()+"%'";
        }
        if(bean.getEstado() != -1){
            ejb+=" AND u.estado = " + bean.getEstado()+" ";
        }
        if(bean.getIdDepartamento() != null && bean.getIdDepartamento() != ""){
            ejb+=" AND u.idDepartamento = '" + bean.getIdDepartamento()+"' ";
        }
        if(bean.getIdProvicia() != null && bean.getIdProvicia() != ""){
            ejb+=" AND u.idProvicia = '" + bean.getIdProvicia()+"' ";
        }
        if(bean.getIdDistrito() != null && bean.getIdDistrito() != ""){
            ejb+=" AND u.idDistrito = '" + bean.getIdDistrito()+"' ";
        }
        
        try{
        Query query = em.createQuery(ejb);
        listaEntidad = query.getResultList();
        }catch(Exception e){
        }
        
        return listaEntidad;
    }
    
    public boolean existeRucEmpresa(String ruc){
        boolean exi=false;
        String ejb="SELECT u FROM Empresa u WHERE u.ruc = '"+ruc+"'";
        
        List<Empresa> empresa = new ArrayList<Empresa>(); 
        Query query = em.createQuery(ejb);
        empresa = query.getResultList();
        
        if(empresa.size() == 0){
            exi=true;
        }
        
        return exi;
    }
    
    public boolean existeRazonSocialEmpresa(String razonSocial){
        boolean exi=false;
        String ejb="SELECT u FROM Empresa u WHERE UPPER(u.razonSocial) = UPPER('"+razonSocial+"')";
        
        List<Empresa> empresa = new ArrayList<Empresa>();
        Query query = em.createQuery(ejb);
        empresa = query.getResultList();
        
        //Empresa empresa1 = (Empresa)query.getSingleResult(); 
        
        if(empresa.size()==0){
            exi=true;
        }
        return exi;
        
    }
    /*
    public Ubigeo getDatosUbigeo(String idDepartamento, String idProvincia, String idDistrito){
        String ejb="SELECT u FROM Ubigeo u WHERE u.cod_dept = '"+idDepartamento+"' AND u.cod_prov = '"+idProvincia+"' AND u.cod_dist = '"+idDistrito+"'";
        Query query = em.createQuery(ejb);
        Ubigeo ubigeo = (Ubigeo)query.getSingleResult(); 
        
        return ubigeo;
    }
*/
    
}
